
Replicating OD Matrices (Cape Town, eThekwini, Johannesburg)

Requirements: R (version shown below), packages: sf, osrm, dplyr, tidyr, readr.
OSRM server running at http://localhost:5000 with algorithm MLD and default car.lua.

Input data:
- Stats SA 2011 subplaces (SP_SA_2011.shp). IDs = SP_CODE.
- OSM: https://download.geofabrik.de/africa/south-africa-latest.osm.pbf
  (Downloaded/used on: 2025-04-07; SHA-256: a51e7629...b88a)

Run:
Rscript run_od_sa_metros.R

Outputs:
- od_travel_time_city_of_cape_town.csv (from_id,to_id,travel_time_min)
- od_travel_time_ethekwini.csv
- od_travel_time_city_of_johannesburg.csv
- subplace_lookup_<city>.csv

Assumptions: minutes; no first/last-mile; no symmetrization; centroids via st_point_on_surface(3857→4326).

Environment:
<paste sessionInfo() here>

{
  "generated_utc": "2025-09-26 22:07:49",
  "environment": {
    "R_version": "4.4.3",
    "platform": "x86_64-pc-linux-gnu",
    "packages": [
      "1.0.20",
      "4.2.0",
      "1.1.4",
      "1.3.1",
      "2.1.5",
      "4.4.3",
      "1.9.1",
      "0.6.37"
    ]
  },
  "inputs": {
    "subplace_shapefile": "/home/rstudio/data/shape_files/SP_SA_2011.shp",
    "subplace_shapefile_sha256": "1bd865044a7932e0563f1b48bfeb70b7788736688e070295ae90a0d3919150a8",
    "dc_names": [
      "City of Cape Town",
      "eThekwini",
      "City of Johannesburg"
    ]
  },
  "osrm": {
    "server": "http://localhost:5000/",
    "profile": "driving",
    "algorithm": {},
    "max_table_size": {},
    "pbf_url": "https://download.geofabrik.de/africa/south-africa-latest.osm.pbf",
    "pbf_sha256": "a51e7629b674c9f142959d7500f0fdba9077faa4c6c414c3a73e219dcb7bb88a",
    "pbf_path": "/var/lib/osrm/south-africa-latest.osm.pbf",
    "pbf_mtime_utc": "2025-04-07 03:23:52",
    "dataset_type": "MLD",
    "dataset_files": [
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.cell_metrics",
        "readable": true,
        "sha256": "60bcfdecd1bdb0636a8d6e0c623334d3d07e406309fa78475879644fe586fa45",
        "mtime_utc": "2025-04-08 14:20:10"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.cells",
        "readable": true,
        "sha256": "8a1f24fcf606855a1ade46e73a370757a5480118703c0b4ea003a6efe5673646",
        "mtime_utc": "2025-04-08 14:19:57"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.cnbg",
        "readable": true,
        "sha256": "32963a1c331490c8b23f6c94ba44d08d8e0a27278f309468b9ad6b97c3d555f4",
        "mtime_utc": "2025-04-07 19:32:50"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.cnbg_to_ebg",
        "readable": true,
        "sha256": "ab18dc2c11f5612342d17892526ef82b474da00f8b6812f1e10cb5bea2430b82",
        "mtime_utc": "2025-04-08 14:19:51"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.datasource_names",
        "readable": true,
        "sha256": "f07a1485085447f2fbb1243cb48c2dd9a832029ab2a4b4f0d19053b3ea2a9a1a",
        "mtime_utc": "2025-04-08 14:20:00"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.ebg",
        "readable": true,
        "sha256": "dfec44a666742b00480e0a67c81d10f194a7b493f8486c15cdc8a71f5457f2ef",
        "mtime_utc": "2025-04-08 14:19:58"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.ebg_nodes",
        "readable": true,
        "sha256": "795f14c88c47ad23c078723a9efb0b01d70b05eaa0e1140169e05d83ef993d71",
        "mtime_utc": "2025-04-08 14:19:54"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.edges",
        "readable": true,
        "sha256": "fef94e1132d5d43251bce44db7fdb9027358dd811bd3a8c0d63a5af9d05004c1",
        "mtime_utc": "2025-04-07 19:33:11"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.enw",
        "readable": true,
        "sha256": "2cf1b964c56eb9312f4bc61901232eec4fdfb880db87ed110082119026310ea5",
        "mtime_utc": "2025-04-08 14:19:56"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.fileIndex",
        "readable": false,
        "sha256": null,
        "mtime_utc": "2025-04-08 14:19:54"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.geometry",
        "readable": true,
        "sha256": "302d13c410cebfac7403526bdbaf4e6d1a22b92b1b77e18d0d1789996eea6e2a",
        "mtime_utc": "2025-04-07 19:33:12"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.icd",
        "readable": true,
        "sha256": "1809254ad518f683d84b14d616170fd05c101916de13554177d41e7db76b8413",
        "mtime_utc": "2025-04-07 19:33:11"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.maneuver_overrides",
        "readable": true,
        "sha256": "ee11afb42df4d45ebe1a73bfbce9facd73e6ca84f24a0d9ebf4a21c45679a870",
        "mtime_utc": "2025-04-08 14:19:56"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.mldgr",
        "readable": true,
        "sha256": "f119d7743ec30a8f5fdd75f0b69cb3e6850b22d13e657a583b42e17f0af66d33",
        "mtime_utc": "2025-04-08 14:20:10"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.names",
        "readable": true,
        "sha256": "0d154ce39ced9ae24f02afe4c9381b89b84bd7886dc1f391fd68bee183096f32",
        "mtime_utc": "2025-04-07 19:32:01"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.nbg_nodes",
        "readable": true,
        "sha256": "97185e91c5663546786061b29c94edcbf3a521e83aae9bca08fcb308f48507e0",
        "mtime_utc": "2025-04-07 19:32:50"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.partition",
        "readable": true,
        "sha256": "754166870b251dbbe306017acbc04088288157cf6c5a6fc0cde48780a5f7deb1",
        "mtime_utc": "2025-04-08 14:19:57"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.properties",
        "readable": true,
        "sha256": "be0f053a6aa47f5a2d5dbe29f62c77ab282a4e993d894eb1224b4c9121fbd505",
        "mtime_utc": "2025-04-07 19:32:01"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.ramIndex",
        "readable": true,
        "sha256": "34250957e167ea1e5e4171d76b7b2706138d6e40ab3ae459d93e45ec5a67321c",
        "mtime_utc": "2025-04-07 19:33:16"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.restrictions",
        "readable": true,
        "sha256": "2f9263df26473548866c39a221c409ac872778d03fb81710886419e7999eb284",
        "mtime_utc": "2025-04-07 19:33:03"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.timestamp",
        "readable": true,
        "sha256": "42db18a1c71ecde18143de00f28c70bdc48d29b1dc1dc3f1bb8467bf79f9b5c9",
        "mtime_utc": "2025-04-07 19:31:25"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.tld",
        "readable": true,
        "sha256": "baa71ebc6f3a1ebd6d68670fd6954ec4623ca3181fc959e2a6accfc08d69ccb4",
        "mtime_utc": "2025-04-07 19:33:11"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.tls",
        "readable": true,
        "sha256": "d00adfce264b672f1379f395d692154dee1e7988793e70e47ab7fb826dfebe02",
        "mtime_utc": "2025-04-07 19:33:11"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.turn_duration_penalties",
        "readable": true,
        "sha256": "71cb1979250a44747836fd9e2060041e407dae0a74a019b04d99f7d5727ef6df",
        "mtime_utc": "2025-04-07 19:33:03"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.turn_penalties_index",
        "readable": true,
        "sha256": "3de5bbb318e07852c7e4493fcfef6dd004ae212be002d97ecc406c984ccb963d",
        "mtime_utc": "2025-04-07 19:33:04"
      },
      {
        "path": "/var/lib/osrm/south-africa-latest.osrm.turn_weight_penalties",
        "readable": true,
        "sha256": "13203793a2fe3c0badcbac40f2d70b8d65906a2e0674c0f13dc6f3d0f562c0be",
        "mtime_utc": "2025-04-07 19:33:03"
      }
    ],
    "routed_cmd": "/opt/osrm-backend/build/osrm-routed --algorithm mld south-africa-latest.osrm"
  },
  "run_settings": {
    "block_size": 90,
    "mc_cores": 8,
    "units": "minutes",
    "symmetry": "not symmetrized",
    "first_last_mile": "not included",
    "centroid_method": "st_point_on_surface in EPSG:3857, then transform to EPSG:4326"
  },
  "cities": {
    "city_of_cape_town": {
      "dc_name": "City of Cape Town",
      "n_subplaces": 921,
      "od_pairs": 848241,
      "outputs": {
        "long_csv": "/home/rstudio/processed_data/od_travel_time_city_of_cape_town.csv",
        "long_sha256": "1038ad565efcb6cb1b9a74b9a5652c7ba1489eeb746faa43570715ec08279552",
        "wide_csv": "/home/rstudio/processed_data/od_travel_time_city_of_cape_town_wide.csv",
        "wide_sha256": "956d2806b8f8ffe291412f7544d5403610e97e13f0871c079c4c742396b20ad7",
        "lookup_csv": "/home/rstudio/processed_data/subplace_lookup_city_of_cape_town.csv",
        "lookup_sha256": "1bf99ebfa3abd5e4a9c2b7b044892656d9dd951a1f42b15f42ca983efcb18883"
      },
      "asymmetry": {
        "max_abs_minutes": 16.1
      }
    },
    "ethekwini": {
      "dc_name": "eThekwini",
      "n_subplaces": 673,
      "od_pairs": 452929,
      "outputs": {
        "long_csv": "/home/rstudio/processed_data/od_travel_time_ethekwini.csv",
        "long_sha256": "163949eea5170d344dc3c3c7cb772304e9273b0289ada9a519addbd44db3a52c",
        "wide_csv": "/home/rstudio/processed_data/od_travel_time_ethekwini_wide.csv",
        "wide_sha256": "1d5ffc6826f151a1e8ac2b458a3dc0d2f26aaa982829334ae2f253c706a67721",
        "lookup_csv": "/home/rstudio/processed_data/subplace_lookup_ethekwini.csv",
        "lookup_sha256": "abef13d7600f5f7f3a1f33d9013520cc15fbd22b0f249dd707a704ba624badba"
      },
      "asymmetry": {
        "max_abs_minutes": 8.2
      }
    },
    "city_of_johannesburg": {
      "dc_name": "City of Johannesburg",
      "n_subplaces": 804,
      "od_pairs": 646416,
      "outputs": {
        "long_csv": "/home/rstudio/processed_data/od_travel_time_city_of_johannesburg.csv",
        "long_sha256": "66359b2f1776bc5a1e61ee060711734d0c865d63827561b280713a959b934562",
        "wide_csv": "/home/rstudio/processed_data/od_travel_time_city_of_johannesburg_wide.csv",
        "wide_sha256": "833d8152f2d3c9dab4937f5b1765a88bd0353424bf435c1b4eb059876963c2a7",
        "lookup_csv": "/home/rstudio/processed_data/subplace_lookup_city_of_johannesburg.csv",
        "lookup_sha256": "1487cdd0da3f7e476f288d10f3726d5f978a28da2c335f7310cde2d903fe87cc"
      },
      "asymmetry": {
        "max_abs_minutes": 8.1
      }
    }
  }
}
